#Boa:Dialog:Dialog1

import wx
import wx.grid
import utiles
import consultasBD
import barras
import ImageFont, ImageDraw, Image
import sys
import sincronizar_tabla  


ANCHO_CODIGO = 310 # Relacion 1,37 (ALTO_CODIGO * 11 / ANCHO_CODIGO * 4)
ALTO_CODIGO  = 160 #


def create(parent):
    return Dialog1(parent)

[wxID_DIALOG1, wxID_DIALOG1BUSCAR, wxID_DIALOG1BUTTON1, wxID_DIALOG1BUTTON2, 
 wxID_DIALOG1CODSUSSAN, wxID_DIALOG1GRID1, wxID_DIALOG1GUARDARCAMBIOS, 
 wxID_DIALOG1NUEVOPRECIO, wxID_DIALOG1PRECIOVIEJO, wxID_DIALOG1STATICLINE1, 
 wxID_DIALOG1STATICTEXT1, wxID_DIALOG1STATICTEXT2, wxID_DIALOG1STATICTEXT3, 
 wxID_DIALOG1STATICTEXT4, 
] = [wx.NewId() for _init_ctrls in range(14)]

class Dialog1(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_DIALOG1, name='', parent=prnt,
              pos=wx.Point(164, 153), size=wx.Size(704, 358),
              style=wx.DEFAULT_DIALOG_STYLE, title='Cambio de Precios')
        self.SetClientSize(wx.Size(688, 322))

        self.staticText1 = wx.StaticText(id=wxID_DIALOG1STATICTEXT1,
              label='PTC A CAMBIAR>', name='staticText1', parent=self,
              pos=wx.Point(24, 16), size=wx.Size(87, 13), style=0)

        self.codsussan = wx.TextCtrl(id=wxID_DIALOG1CODSUSSAN, name='codsussan',
              parent=self, pos=wx.Point(160, 16), size=wx.Size(100, 21),
              style=0, value='')

        self.buscar = wx.Button(id=wxID_DIALOG1BUSCAR, label='Buscar',
              name='buscar', parent=self, pos=wx.Point(280, 16),
              size=wx.Size(75, 23), style=0)
        self.buscar.Bind(wx.EVT_BUTTON, self.OnBuscarButton,
              id=wxID_DIALOG1BUSCAR)

        self.staticText2 = wx.StaticText(id=wxID_DIALOG1STATICTEXT2,
              label='Precio Viejo a la VENTA:', name='staticText2', parent=self,
              pos=wx.Point(16, 56), size=wx.Size(60, 13), style=0)

        self.precioViejo = wx.StaticText(id=wxID_DIALOG1PRECIOVIEJO,
              label='{vacio}', name='precioViejo', parent=self,
              pos=wx.Point(160, 56), size=wx.Size(35, 13), style=0)

        self.staticText3 = wx.StaticText(id=wxID_DIALOG1STATICTEXT3,
              label='NUEVO PRECIO a la VENTA:', name='staticText3', parent=self,
              pos=wx.Point(224, 56), size=wx.Size(80, 13), style=0)

        self.nuevoPrecio = wx.TextCtrl(id=wxID_DIALOG1NUEVOPRECIO,
              name='nuevoPrecio', parent=self, pos=wx.Point(320, 48),
              size=wx.Size(100, 21), style=0, value='0.00')

        self.GuardarCambios = wx.Button(id=wxID_DIALOG1GUARDARCAMBIOS,
              label='Guardar Cambios', name='GuardarCambios', parent=self,
              pos=wx.Point(424, 48), size=wx.Size(120, 23), style=0)
        self.GuardarCambios.Bind(wx.EVT_BUTTON, self.OnGuardarCambiosButton,
              id=wxID_DIALOG1GUARDARCAMBIOS)

        self.button1 = wx.Button(id=wxID_DIALOG1BUTTON1,
              label='Imprimir Etiqueta', name='button1', parent=self,
              pos=wx.Point(560, 48), size=wx.Size(96, 23), style=0)

        self.grid1 = wx.grid.Grid(id=wxID_DIALOG1GRID1, name='grid1',
              parent=self, pos=wx.Point(16, 120), size=wx.Size(632, 160),
              style=0)
        self.grid1.Bind(wx.grid.EVT_GRID_CELL_CHANGE,
              self.OnGrid1GridCellChange)

        self.staticLine1 = wx.StaticLine(id=wxID_DIALOG1STATICLINE1,
              name='staticLine1', parent=self, pos=wx.Point(17, 98),
              size=wx.Size(647, 2), style=0)

        self.staticText4 = wx.StaticText(id=wxID_DIALOG1STATICTEXT4,
              label='Cambio individual', name='staticText4', parent=self,
              pos=wx.Point(8, 0), size=wx.Size(83, 13), style=0)

        self.button2 = wx.Button(id=wxID_DIALOG1BUTTON2,
              label='Guarda Cambios Masivos', name='button2', parent=self,
              pos=wx.Point(440, 288), size=wx.Size(208, 23), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnButton2Button,
              id=wxID_DIALOG1BUTTON2)

    def __init__(self, parent):
        self._init_ctrls(parent)
        '''Inicializa la Grilla'''
        #configuro la grilla de facturacion
        self.padre = parent
        self.sucursal = self.padre.sucursalNro
        self.grid1.CreateGrid(60,9)
              
        columnas =['PTc      ','Cod. Sussan','Descripcion     ','Cantidad','Talle  ','Color','P. Venta Final  ','Iva   ','Total $',]
        
        for i, col in enumerate(columnas): 
            self.grid1.SetColLabelValue(i, col)
            self.grid1.AutoSizeColumn(i,True)
            
        self.grid1.AutoSizeRow(0,True)
        
        #self.grid1.SetRowLabelValue(10,"TOTALES")
        self.grid1.DisableDragColSize()
        self.total = "" 
        
        #para hacer que solo sean legibles algunas columnas
        for x in xrange(11):
            for i in xrange(10):
                if i not in (0,3,4,5,6):
                    self.grid1.SetReadOnly(x,i,True)

    def OnBuscarButton(self, event):
        self.ptc = self.codsussan.GetValue()
        SQL = "SELECT b.preciolt1 as 'precio',a.codsussan,descri ,preciolt1, talle, color,proveedor FROM producto_talle_color a, productos b WHERE a.id='%s' AND a.codsussan=b.codsussan" % (str(self.ptc))
        print SQL
        resultados = consultasBD.ordenCrudaDict(SQL)
        #for r in resultados:
        self.precioViejo2 = str(resultados[0]["precio"])
        self.codsussan2 = str(resultados[0]["codsussan"])
        self.descri =str(resultados[0]["descri"])
        self.talle =str(resultados[0]["talle"])
        self.color = str(resultados[0]["color"])
        self.precioViejo.SetLabel(str(self.precioViejo2))
        self.provee = str(resultados[0]["proveedor"])
        print "PROVEEDOR"+str(self.provee)

    def OnGuardarCambiosButton(self, event):
        precioNuevo = self.nuevoPrecio.GetValue()
        fecha = self.padre.fecha
        print fecha
        
        SQL = "UPDATE productos SET preciolt1=%s WHERE codsussan='%s'" % (precioNuevo,self.codsussan2)
        print SQL
        sincronizar_tabla.addChange(sql=SQL)
        id = consultasBD.executa(self,SQL)
        if id==0 : 
            utiles.mensaje(self, "PRECIO MODIFICADO.")
            
            SQL2 = "INSERT INTO cambiosprecios VALUES ('','%s','%s','%s','%s','1','%s')" % (self.ptc,self.codsussan2,self.precioViejo2,precioNuevo,fecha)
            #sincronizar_tabla.addChange(sql=SQL)           
            print SQL2 
            sincronizar_tabla.addChange(sql=SQL2)
            consultasBD.executa(self,SQL2)
            #impresion de etiquetas
            from barras import imprimir_etiquetas as ie
        
            proveedor = str(self.provee)
            parametro_impresion = []
            
            parametro_impresion.append((self.ptc, self.codsussan2,self.descri, precioNuevo, self.talle, self.color))
    
            print "parametro_impresion", parametro_impresion
            
            temp = ie(parametro_impresion, proveedor=proveedor)
            temp.imprimir()        
            
            event.Skip()
    
    def OnImprimirButton(self, event):
        #if not self._validar_imprimir():
        #    return
        
        from barras import imprimir_etiquetas as ie
        
        #proveedor = self.inproveedor.Value
        parametro_impresion = []
        
        for x in xrange(60):
            if (self.grid1.GetCellValue(int(x),0) != ""):
                codsussan    = self.grid1.GetCellValue(int(x),1)
                descri    = str(self.grid1.GetCellValue(int(x),2))
                cantidad = int(self.grid1.GetCellValue(int(x),3))
                talle    = self.grid1.GetCellValue(int(x),4).upper()
                color    = self.grid1.GetCellValue(int(x),5)
                #costounidad    = float(self.grid1.GetCellValue(int(x),6))
                
                #join con precios
                SQL = "SELECT preciolt1 FROM productos WHERE codsussan = '%s'" % (codsussan)
                print SQL
                resultados = consultasBD.ordenCrudaResultDict(SQL)
                precioVenta = resultados["preciolt1"]
                
                
                
                id_producto_talle_color = self._buscar_producto_talle_color(codsussan, talle, color)
                
                for y in range(cantidad):
                    parametro_impresion.append((id_producto_talle_color, codsussan, descri, precioVenta, talle, color))
        
        print "parametro_impresion", parametro_impresion
        
        
        temp = ie(parametro_impresion, "") #en el vacio va el proveedor
        temp.imprimir()        
        
        #event.Skip()

    def OnGrid1GridCellChange(self, event):
        fila    = self.grid1.GetGridCursorRow()
        columna = self.grid1.GetGridCursorCol()
                
        
        celda = self.grid1.GetCellValue(fila, columna)
        #CELDA VACIA
        if celda == "" :
            self.grid1.SetCellValue(fila, columna,"")
            for x in xrange(9):
                self.grid1.SetCellValue(fila,x,"")
            
            self.grid1.ForceRefresh()
            self.actualizaSubtotal()
        
        
        #INGRESO ALGO.
        else:
            if columna == 0 :
                
	            resultados = self._buscar(celda)
	                
	            ptc = resultados[0]
	            self._mostrar_articulo_en_grilla(fila, ptc) 
	            
	            #actualizo subtotal
	            self.grid1.ForceRefresh()                    
                
				#INGRESO UNA CANTIDADs
##        elif (columna == 3):
##                #validar que sea un nro. en la cantidad
##                self._validar_cantidad(fila)
##                self.grid1.ForceRefresh()
##                
##                    
##            #INGRESO UN PRECIO
##        elif (columna == 6):
##                #validar que sea un nro. en la cantidad                           
##                self.grid1.ForceRefresh()   
        
    
    def _buscar(self, ptc):
        '''Dada un codigo de producto intenta encontrarlo en la bd y devolverlo'''
        sql = "SELECT b.preciolt1 as 'precio',a.codsussan,descri ,preciolt1, talle, color,proveedor FROM producto_talle_color a, productos b WHERE a.id='%s' AND a.codsussan=b.codsussan" % (ptc)
        print sql
        resultados = consultasBD.ordenCrudaDict(sql)
        return resultados
    
    def _buscar_producto_talle_color(self, codsussan, talle, color):
        '''Retorna el ptc que tenga los atrib de parametro, si no esta lo crea'''
        sucursal = self.sucursal
        sql = "SELECT * FROM producto_talle_color WHERE codsussan = '%s' AND talle = '%s' AND color = '%s'" % (codsussan, talle, color)
        print sql
        resultados = consultasBD.ordenCrudaDict(sql)
        if len(resultados) != 0:
            return resultados[0]['id']
    
    def _mostrar_articulo_en_grilla(self, fila, articulo):
        '''Muestra un articulo en la fila dada'''
        #self.grid1.SetCellValue(self.grid1.GetGridCursorRow(), 0, articulo['codsussan']) #cod. sussan
        self.grid1.SetCellValue(self.grid1.GetGridCursorRow(), 1, articulo['codsussan']) #cod. sussan
        self.grid1.SetCellValue(self.grid1.GetGridCursorRow(), 2, articulo['descri']) #descri
        self.grid1.SetCellValue(self.grid1.GetGridCursorRow(), 3, "1") #cant.
        self.grid1.SetCellValue(    self.grid1.GetGridCursorRow(), 4,  articulo['talle']) #talle
        self.grid1.SetCellValue(self.grid1.GetGridCursorRow(), 5,  articulo['color']) #color
        self.grid1.SetCellValue(self.grid1.GetGridCursorRow(), 6, str(articulo['preciolt1'])) #final
        #self.grid1.SetCellValue(self.grid1.GetGridCursorRow(), 7, str(sacariva(r[8]))) #con iva
        self.grid1.SetCellValue(self.grid1.GetGridCursorRow(), 8, str(articulo['preciolt1'])) #final

    
    def _validar_cantidad(self, fila):
        '''Verifica que la cantidad en una fila sea adecuada'''
        error = False
        msg   = ""
         
        cantidad = self.grid1.GetCellValue(fila, 3)
        try:
            if int(cantidad) == 0:
                error = True
                msg = "La cantidad no puede ser CERO"
                self.grid1.SetCellValue(fila, 3, "1")
        except:
            error = True
            msg   = "La cantidad debe ser un numero entero"             
            self.grid1.SetCellValue(fila, 3, "1")

        if error:
            mensaje = wx.MessageDialog(self, msg, "Error", style=wx.OK,pos = wx.DefaultPosition)
            mensaje.ShowModal()
            return False
        
        return True     

    def OnButton2Button(self, event):
       #if not self._validar_guardar():
       #    return
       fecha = self.padre.fecha
       print fecha
       
       try:
           consultasBD.begin()

           for x in xrange(int(self.grid1.GetNumberRows())):

               if self.grid1.GetCellValue(x,0) == "":
                   continue

               precioNuevo = self.grid1.GetCellValue(x,6)
               self.ptc = self.grid1.GetCellValue(x,0)
               self.codsussan = self.grid1.GetCellValue(x,1)
               self.precioViejo2= "0.0"
               SQL = "UPDATE productos SET preciolt1=%s WHERE codsussan='%s'" % (precioNuevo,self.codsussan)
               print SQL
               sincronizar_tabla.addChange(sql=SQL)
               consultasBD.executaSinCommit(self,SQL)

               SQL2 = "INSERT INTO cambiosprecios VALUES ('','%s','%s','%s','%s','1','%s')" % (self.ptc,self.codsussan,self.precioViejo2,precioNuevo,fecha)
               print SQL2
               sincronizar_tabla.addChange(sql=SQL2)
               consultasBD.executaSinCommit(self,SQL2)

           consultasBD.commit()


           sincronizar_tabla.syncServerTables(self, ["cambiosprecios","productos"])
           utiles.mensaje(self, "El precio se modifico y sincronizo correctamente")
           self.Close()

       except sincronizar_tabla.SyncError:
           utiles.mensaje(self, "El precio se modifico \n pero no termino de transmitirse por favor realize un sincronizacion")
       except Exception, e:
           print e.__str__()
           utiles.mensaje(self, "NO se pudo modificar el precio")
           consultasBD.rollback()
        
       self.OnImprimirButton(None)